home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 May: Tool Chest / Developer CD Series Tool Chest (Apple Computer)(May 1999).iso / Tool Chest / Games / Game Sample Code / ZAM 1.0a13 / GameHeaders / Sprite.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-09-16  |  6.5 KB  |  171 lines  |  [TEXT/KAHL]

  1. #pragma once
  2. #include "FixGraf.h"
  3. #include "xthing.h"
  4. #include "GrafUtils.h"
  5.  
  6.  
  7. /* this is called if installed for a particular frame */
  8.  
  9.  
  10. typedef (*collisionProc)(struct sprite *sprite1, struct sprite *sprite2, Rect *area);
  11. typedef Boolean (*moveProc)(struct sprite *sprite1);
  12. typedef Boolean (*frameProc)(struct sprite *sprite1, struct frameCell *frame);
  13.  
  14.  
  15. typedef struct {
  16.     GWorldPtr    image;            // the image of this frame
  17.     RgnHandle    mask;            // the mask region for this frame
  18.     Point        maskLoc;        // topLeft of mask over image location
  19.     long        frameRef;        // application storage for this frame
  20.     frameProc    frameCB;        // proc to be called when this frame is displayed
  21. } frameCell, *frameCellPtr;
  22.  
  23. typedef struct frameInfo {
  24.     short            frameCount;        // number of frames in this set
  25.     short            frameIndex;        // index to current frame / mask
  26.     frameCellPtr    curImage;        // pointer to current frame / mask
  27.     frameCellPtr    prevImage;        // pointer to previous frame / mask
  28.     frameCell        prevCell;
  29.     Point            dimension;        // size of sprite
  30.     Point            center;            // integer center
  31. } frameInfo;
  32.  
  33. typedef struct frameSet {
  34.     frameInfo        finfo;            // header block information for this frame set
  35.     frameCell        flist[1];        // variable sized array
  36. } frameSet, *frameSetPtr;
  37.  
  38.  
  39. typedef struct sprite {
  40.     struct sprite    *next;                // sprite link in active list
  41.     struct sprite    *prev;
  42.     struct sprite    *usrNext;            // link for use by user application    
  43.     struct sprite    *usrPrev;
  44.     long            spriteFlags;
  45.     xthing            frameTask;            // task for changing frame
  46.     xthing            moveTask;            // task for moving
  47.     long            frameTimeInterval;    // time between frames
  48.     long            moveTimeInterval;    // time between moving
  49.     moveProc        moveHandler;        // routine to handle movement
  50.     frameProc        frameHandler;        // frame task called on every frame
  51.     collisionProc    collideHandler;
  52.     Boolean            visible;            // true if sprite is visible
  53.     Boolean            inUse;
  54.     fixPt            loc;                // location in fixed coordinates (center)
  55.     fixPt            remoteLoc;            // location for a remote sprite - gets slamed into loc
  56.     fixPt            vel;                // velocity in fixed point
  57.     frameSetPtr        frameList;            // the graphics of this one
  58.     Rect            prevBounds;
  59.     Rect            bounds;                // integer coordinates - used for destination drawing
  60.     Rect            updateBounds;        // area that needs to be updated
  61.     Rect            constrainRect;
  62.     short            spriteID;            // user id number
  63.     long            refCon;                // storage area
  64.     long            data;
  65.     struct spriteLayer *ownerLayer;
  66. } sprite, *spritePtr;
  67.  
  68. typedef struct collisionSpec collisionSpec;
  69.  
  70.  
  71. /* United Nations */
  72. /* 42nd Ave New York  on the waterfront */
  73.  
  74. enum {
  75.         kLayerDirty = 0x00000001,
  76.         kLayerActive = 0x80000000,
  77.         kFrameTaskBeforeUpdate = 0x00000001,
  78.         kFrameTaskAfterUpdate = 0x00000002,
  79.         kConstrainToRect = 0x00000004,
  80.         kWrapToRect = 0x00000008,
  81.         kRemoteSprite = 0x000010,
  82.         kRemoteUpdate = 0x000020,
  83.         kDefaultFrameAdvance = 0x00000040,
  84.         kRemoteSpawn = 0x00000100,
  85.         kRemoteDead = 0x00000200,
  86.         kRemoteKilled = 0x00000400,
  87.         kNeedsToBeErased = 0x40000000,
  88.         kNeedsToBeDrawn = 0x80000000
  89.     };
  90.  
  91.  
  92. typedef struct spriteLayer {
  93.     struct spriteLayer    *next;        // the layer in back of this one
  94.     struct spriteLayer    *prev;        // the layer in front of this one
  95.     spritePtr    sprites;            // the sprites in this layer
  96.     short        activeCount;        // number of sprites that are currently moving and stuff
  97.     GWorldPtr    tween;                // the work GWorld for this layer
  98.     GWorldPtr    backdrop;            // the background for this layer
  99.     WindowPtr    window;                // the window this layer ends up in
  100.     long        layerFlags;
  101.     long        layerID;
  102.     long        layerRefcon;
  103. } spriteLayer, *spriteLayerPtr;
  104.  
  105.  
  106. void InitSprites(void);
  107. void InitFrameSetInfo(frameSetPtr fsp, short frameCount);
  108. OSErr CreateColorIconFrameSet(frameSetPtr *newFrameSet, short startID, short numFrames);
  109. void AttachCTableToFrameSet(frameSetPtr frameSet, CTabHandle srcCtable, short ctSeed);
  110.  
  111. OSErr    CreateSpriteLayer(spriteLayerPtr *retSprite, 
  112.                             GWorldPtr tween, 
  113.                             GWorldPtr backdrop, 
  114.                             WindowPtr spriteWin);
  115. OSErr CreateEmptySprite(spriteLayerPtr    sprLayer,
  116.                             spritePtr  *newSprite,         /* new sprite returned here */
  117.                             long        spriteFlags,
  118.                             long        moveTimeInterval,
  119.                             long        frameTimeInterval,
  120.                             long        refCon);        /* application value */
  121. OSErr CreateColorIconSprite(spriteLayerPtr    sprLayer,
  122.                             spritePtr  *newSprite,     /* new sprite returned here */
  123.                             short        startID,     /* starting resource ID of cicn */
  124.                             short        numFrames,    /* number of resources to load */
  125.                             long        spriteFlags,
  126.                             long        moveTimeInterval,
  127.                             long        frameTimeInterval,
  128.                             long        refCon);        /* application value */
  129.  
  130. void SetSpriteLoc(spritePtr spr, Fixed h, Fixed v);
  131. void ShowSprite(spritePtr spr);
  132. void HideSprite(spritePtr spr);
  133. void StartSpriteAction(spritePtr spr);
  134. void StopSpriteAction(spritePtr spr);
  135. Boolean SpriteFrameTask(xthing *xtp, spritePtr spr);
  136. Boolean SpriteMoveTask(xthing *xtp, spritePtr spr);
  137. OSErr CopyFrameSet(frameSetPtr srcFrameSet, frameSetPtr *destFrameSet);
  138. void CheckSpriteColission(spritePtr spr);
  139. void InvalSprite(spritePtr spr);
  140. void SetSpriteCurrentFrame(spritePtr theSprite, short frameNum);
  141. void SetSpriteFrameSet( spritePtr theSprite, frameSetPtr srcFrameSet);
  142. short GetNextSpriteFrameIndex(spritePtr spr);
  143. OSErr AddSpriteToHitList(spritePtr    spr1, spritePtr spr2, ProcPtr handler);
  144. void SpriteColission(spritePtr spr);
  145. void StartRemoteSpriteAction(spritePtr spr);
  146. void DrawSpriteBackLayers(spriteLayerPtr sprLayer);
  147. void KillSprites(void);
  148. void AddSpriteToLayer(spritePtr spr, spriteLayerPtr sprLayer);
  149. void StopSpriteLayerAction(spriteLayerPtr sprLayer);
  150. void RemoveSpriteFromLayer(spritePtr spr, spriteLayerPtr sprLayer);
  151. void MoveCellMaskRgnToRect(frameCellPtr curFrame, Rect *r);
  152. void UpdateSprites(void);
  153. void SpriteUpdateEvent(void);
  154. void SetFrameSetCTSeed(frameSetPtr frameSet, short newSeed);
  155.  
  156. /*----------------- sprite accessor macros -----------------*/
  157. /* these are not self documenting, so have fun using them */
  158. #define SetSpriteVelocity(xspr,nh,nv) xspr->vel.h = nh;    xspr->vel.v = nv
  159. #define SetSpriteFrameCallback(xspr,frameNum,frameCallback)    xspr->frameList->flist[frameNum].frameCB = (ProcPtr)frameCallback
  160. #define SetSpriteFrameDelay(xspr, frameNum, frameDelay)     xspr->frameList->flist[frameNum].frameDelay = frameDelay
  161. #define SetSpriteFrameRef(xspr,frameNum, refCon)    xspr->frameList->flist[frameNum].frameRef = refCon
  162. #define GetSpriteFrameRef(xspr,frameNum)    xspr->frameList->flist[frameNum].frameRef
  163. #define GetSpriteFrameDelay(xspr,frameNum)    xspr->frameList->flist[frameNum].frameDelay
  164.  
  165.  
  166. /*------------------- sprite global variables -----------------------*/
  167. extern spritePtr    FreeSpriteList;
  168. extern spritePtr    ActiveSpriteList;
  169. extern RgnHandle    SpriteUtilRgn;
  170.  
  171.